package cn.cloudreal.cbms.system.dao.impl;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.log4j.Logger;
import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport;

import cn.cloudreal.cbms.common.util.PageBean;
import cn.cloudreal.cbms.system.dao.UserInfoDao;
import cn.cloudreal.cbms.vo.UserInfo;

/**
 * <p>
 * Title: ITC
 * </p>
 * <p>
 * Description:用户查询数据Dao层实现类
 * </p>
 * <p>
 * Copyright: Copyright (c) 2010
 * </p>
 * <p>
 * Company:云恒瑞通
 * </p>
 * 
 * @author gaoxuejiao
 * @date 2012-07-16
 */
public class UserInfoDaoImpl extends SqlMapClientDaoSupport implements
        UserInfoDao
{

    /** 日志工具类实例 */
    private static final Logger log = Logger.getLogger(UserInfoDaoImpl.class);

    // 用户总数
    private static final String GET_USER_COUNT = "userInfo.getUserInfoCount";

    // 用户总数
    private static final String GET_EXISTUSER_COUNT = "userInfo.getUseCount";

    // 用户列表
    private static final String GET_USER_LIST = "userInfo.getUserInfoList";

    // 修改用户信息
    private static final String UPDATE_USER = "userInfo.updateUserInfo";

    // 删除用户角色中间表
    private static final String DEL_USER_ROLE = "userInfo.delteUserInfoRole";

    // 删除用户信息
    private static final String DEL_USER = "userInfo.delteUserInfo";

    // 删除用户信息 组织架构
    private static final String DEL_USER_ORG = "userInfo.delteUserInfoOrg";

    // 查询单个用户信息
    private static final String GET_USER = "userInfo.getUserInfo";

    // 查询单个用户信息
    private static final String GET_USER_OBJ = "userInfo.getUserInfoObj";

    // 新增用户信息
    private static final String ADD_USER = "userInfo.insertUserInfo";

    // 新增用户角色中间表信息
    private static final String ADD_USER_ROLE = "userInfo.insertUserInfoRole";

    // 新增用户组织架构中间表信息
    private static final String ADD_USER_ORG = "userInfo.insertUserInfoOrg";

    // 组织编号查用户
    private static final String GET_USER_BY_ORGCODE = "userInfo.getUserInfoByOrg";

    /**
     * 查询用户账号是否已经存在
     * 
     * @param userInfo
     * @return boolean
     */
    public boolean isExistUserCode(UserInfo userInfo)
    {

        // 打印进入方法体日志
        if (log.isInfoEnabled())
        {
            log.info("Enter UserInfoleDaoImpl isExistUserCode() method");
        }
        // 查询总条数
        Integer count = (Integer) getSqlMapClientTemplate().queryForObject(GET_EXISTUSER_COUNT,
                userInfo);

        // 如果存在返回true
        if (null != count && count.intValue() > 0)
        {
            return true;
        }

        // 打印退出方法体日志
        if (log.isInfoEnabled())
        {
            log.info("Exit UserInfoleDaoImpl isExistUserCode() method");
        }

        return false;
    }

    /**
     * 查询列表数据
     * 
     * @param page
     * @return List<UserInfo>
     */
    public List<UserInfo> getUserInfos(UserInfo userInfo, PageBean page)
    {
        List<UserInfo> UserInfoList = null;

        // 打印进入方法体日志
        if (log.isInfoEnabled())
        {
            log.info("Enter UserInfoleDaoImpl getUserInfos() method,return List<UserInfo>");
        }
        log.debug(page);
        // 查询总条数
        Integer count = (Integer) getSqlMapClientTemplate().queryForObject(GET_USER_COUNT,
                userInfo);

        if (null == count || count.intValue() < 1)
        {
            return null;
        }
        // 添加条数信息
        page.setTotalRecords(count.intValue());

        // 添加参数
        Map<String, Object> param = new HashMap<String, Object>();
        param.put("begin", page.getPageSize() * (page.getPageNo() - 1) + 1);
        param.put("end", page.getPageSize() * page.getPageNo());

        param.put("userInfo", userInfo);

        // 执行查询列表时间
        UserInfoList = getSqlMapClientTemplate().queryForList(GET_USER_LIST,
                param);

        // 打印退出方法体日志
        if (log.isInfoEnabled())
        {
            log.info("Exit UserInfoleDaoImpl getUserInfos() method,return List<UserInfo>");
        }
        return UserInfoList;
    }

    /**
     * 组织编号查用户
     * 
     * @param orgCode
     * @return List<UserInfo>
     */
    public List<UserInfo> getUserInfoByOrgCode(String orgCode)
    {
        List<UserInfo> UserInfoList = null;

        // 打印进入方法体日志
        if (log.isInfoEnabled())
        {
            log.info("Enter UserInfoleDaoImpl getUserInfos() method,return List<UserInfo>");
        }

        // 执行查询列表时间
        UserInfoList = getSqlMapClientTemplate().queryForList(GET_USER_BY_ORGCODE,
                orgCode);

        // 打印退出方法体日志
        if (log.isInfoEnabled())
        {
            log.info("Exit UserInfoleDaoImpl getUserInfos() method,return List<UserInfo>");
        }
        return UserInfoList;
    }

    /**
     * 根据id查询单个数据
     * 
     * @param page
     * @return UserInfo
     */
    public UserInfo getUserInfo(Integer id)
    {
        // 打印进入方法体日志
        if (log.isInfoEnabled())
        {
            log.info("Enter UserInfoleDaoImpl getUserInfo() method,return UserInfo");
        }

        // 执行当个UserInfo 对象查询
        UserInfo userInfo = (UserInfo) getSqlMapClientTemplate().queryForObject(GET_USER,
                id);
        // 打印退出方法体日志
        if (log.isInfoEnabled())
        {
            log.info("Exit UserInfoleDaoImpl getUserInfo() method,return UserInfo");
        }
        return userInfo;
    }

    /**
     * 根据实体对象查询单个数据
     * 
     * @param page
     * @return UserInfo
     */
    public UserInfo getUserInfo(UserInfo userInfo)
    {
        // 打印进入方法体日志
        if (log.isInfoEnabled())
        {
            log.info("Enter UserInfoleDaoImpl getUserInfo() method,return UserInfo");
        }

        // 执行当个UserInfo 对象查询
        userInfo = (UserInfo) getSqlMapClientTemplate().queryForObject(GET_USER_OBJ,
                userInfo);
        // 打印退出方法体日志
        if (log.isInfoEnabled())
        {
            log.info("Exit UserInfoleDaoImpl getUserInfo() method,return UserInfo");
        }
        return userInfo;
    }

    /**
     * 更新数据
     * 
     * @param userInfo
     * @return
     */
    public void updateUserInfo(UserInfo userInfo)
    {
        // 打印进入方法体日志
        if (log.isInfoEnabled())
        {
            log.info("Enter UserInfoleDaoImpl updateUserInfo() method");
        }

        // 修改用户信息表
        getSqlMapClientTemplate().update(UPDATE_USER, userInfo);

        // 删除用户角色中间表
        getSqlMapClientTemplate().delete(DEL_USER_ROLE, userInfo.getUserCode());

        // 新增用户角色中间表
        getSqlMapClientTemplate().insert(ADD_USER_ROLE, userInfo);

        // 删除用户组织架构DEL_USER_ORG
        getSqlMapClientTemplate().delete(DEL_USER_ORG, userInfo.getUserCode());

        // 新增用户组织架构表
        getSqlMapClientTemplate().insert(ADD_USER_ORG, userInfo);

        // 打印退出方法体日志
        if (log.isInfoEnabled())
        {
            log.info("Exit UserInfoleDaoImpl updateUserInfo() method");
        }
    }

    /**
     * 删除数据
     * 
     * @param page
     * @return
     */
    public void delUserInfo(UserInfo userInfo)
    {
        // 打印进入方法体日志
        if (log.isInfoEnabled())
        {
            log.info("Enter UserInfoleDaoImpl delUserInfo() method");
        }
        // 删除用户角色中间表
        getSqlMapClientTemplate().delete(DEL_USER_ROLE, userInfo.getUserCode());

        // 删除用户组织架构中间表
        getSqlMapClientTemplate().delete(DEL_USER_ORG, userInfo.getUserCode());

        // 执行删除操作
        getSqlMapClientTemplate().delete(DEL_USER, userInfo.getUserCode());

        // 打印退出方法体日志
        if (log.isInfoEnabled())
        {
            log.info("Exit UserInfoleDaoImpl delUserInfo() method");
        }
    }

    /**
     * 新增数据
     * 
     * @param page
     * @return
     */
    public void addUserInfo(UserInfo userInfo)
    {
        // 打印进入方法体日志
        if (log.isInfoEnabled())
        {
            log.info("Enter UserInfoleDaoImpl addUserInfo() method");
        }

        // 判断 入参是否为空
        if (null != userInfo)
        {
            if (null == userInfo.getUsercity())
            {
                userInfo.setUsercity("");
            }
            // 执行新增用户信息
            getSqlMapClientTemplate().insert(ADD_USER, userInfo);

            // 执行新增用户角色信息
            getSqlMapClientTemplate().insert(ADD_USER_ROLE, userInfo);

            // 新增权限用户关系表
            getSqlMapClientTemplate().insert(ADD_USER_ORG, userInfo);
        }

        // 打印退出方法体日志
        if (log.isInfoEnabled())
        {
            log.info("Exit UserInfoleDaoImpl addUserInfo() method");
        }
    }
}
